/*
 * @Author: your name
 * @Date: 2021-10-14 11:09:50
 * @LastEditTime: 2021-10-14 15:53:42
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \mustache_lk\src\Scanner.js
 */
export default class Scanner {
  constructor(templateStr) {
    this.templateStr = templateStr;
    this.pos = 0; // 指针
    this.tail = templateStr; // 尾巴，一开始就是模板字符串的原文
  }

  /** 功能弱，就是走过指定内容，没有返回值 */
  scan(tag) {
    if (this.tail.indexOf(tag) === 0) {
      // tag有多长，就让指针后移多少位
      this.pos += tag.length;
      // this.tail = this.templateStr.substring(this.pos)
      this.tail = this.tail.substring(tag.length)
    }
  }

  /** 让指针进行扫描，直到遇见指定内容结束，并且能够返回结束之前路过的文字 */
  scanUtil(stopTag) {
    // 记录一下执行本方法的时候pos的值
    const pos_backup = this.pos;
    // 当尾巴开头不是stopTag 的时候，就说明还没有扫描到 stopTag
    while (this.eos() && this.tail.indexOf(stopTag) !== 0) {
      this.pos++;
      this.tail = this.templateStr.substring(this.pos);
    }

    return this.templateStr.substring(pos_backup, this.pos)
  }

  eos() {
    return this.pos < this.templateStr.length
  }

}